/**
 * 
 */
package org.lora.biz.ou.group.service;

import java.util.List;

import org.lora.biz.ou.entity.EmployeeIdentityView;
import org.lora.biz.ou.exception.LoraOrgUserException;
import org.lora.biz.ou.group.entity.Group;
import org.lora.biz.ou.group.entity.GroupFormula;
import org.lora.core.mybatis.Page;

/**
 * <p>
 * 类名:IGroupService
 * </p>
 * 描述:<br>
 * 创建时间:2016年9月22日 下午3:59:11<br>
 * 
 * @author Bladnir@outlook.com<br>
 *         修改历史:<br>
 *         2016年9月22日 Bladnir 创建<br>
 */
public interface IGroupService {

	/**
	 * 获取域下的所有群组和群组类型
	 * 
	 * @param domainId
	 * @return
	 * @throws LoraOrgUserException
	 */
	public List<Group> getGroupListByDomainId(String domainId) throws LoraOrgUserException;

	/**
	 * 获取群组中的身份
	 * 
	 * @param groupId
	 * @param submitIdentityId
	 * @param draftIdentityId
	 * @param page
	 * @return
	 * @throws LoraOrgUserException
	 */
	public List<EmployeeIdentityView> getGroupMember(String groupId, String submitIdentityId, String draftIdentityId, Page page)
			throws LoraOrgUserException;

	/**
	 * 获取群组中的身份数量
	 * 
	 * @param groupId
	 * @param submitIdentityId
	 * @param draftIdentityId
	 * @return
	 * @throws LoraOrgUserException
	 */
	public int getGroupMemberCount(String groupId, String submitIdentityId, String draftIdentityId) throws LoraOrgUserException;

	/**
	 * 批量添加身份到群组
	 * 
	 * @param groupId
	 * @param eiIdList
	 * @throws LoraOrgUserException
	 */
	public void addEIToGroup(String groupId, List<String> eiIdList) throws LoraOrgUserException;

	/**
	 * 批量从群组中删除身份
	 * 
	 * @param groupId
	 * @param eiIdList
	 * @throws LoraOrgUserException
	 */
	public void deleteEIToGroup(String groupId, List<String> eiIdList) throws LoraOrgUserException;

	/**
	 * 根据ID获取群组
	 * 
	 * @param groupId
	 * @return
	 * @throws LoraOrgUserException
	 */
	public Group getGroupById(String groupId) throws LoraOrgUserException;

	/**
	 * 根据群组编号 获取群组对象
	 * 
	 * @param serialNumber
	 * @return
	 * @throws LoraOrgUserException
	 */
	public Group getGroupByNumber(String serialNumber) throws LoraOrgUserException;

	/**
	 * 获取群组中的身份
	 * 
	 * @param group
	 * @param submitIdentityId
	 * @param draftIdentityId
	 * @param page
	 * @return
	 * @throws LoraOrgUserException
	 */
	public List<EmployeeIdentityView> getGroupMember(Group group, String submitIdentityId, String draftIdentityId, Page page)
			throws LoraOrgUserException;

	/**
	 * 插入群组公式
	 * 
	 * @param groupFormula
	 * @return
	 * @throws LoraOrgUserException
	 */
	public int insertGroupFormula(GroupFormula groupFormula) throws LoraOrgUserException;

	/**
	 * 删除群组公式
	 * 
	 * @param groupFormulaIdList
	 * @return
	 * @throws LoraOrgUserException
	 */
	public int deleteGroupFormulaById(List<String> groupFormulaIdList) throws LoraOrgUserException;

	/**
	 * 根据群组ID获取 群组中的公式列表
	 * 
	 * @param groupId
	 * @param page
	 * @return
	 * @throws LoraOrgUserException
	 */
	public List<GroupFormula> getGroupFormulaList(String groupId, Page page) throws LoraOrgUserException;

	/**
	 * 根据群组ID获取 群组中的公式列表的数量
	 * 
	 * @param groupId
	 * @return
	 * @throws LoraOrgUserException
	 */
	public int getGroupFormulaListCount(String groupId) throws LoraOrgUserException;

	/**
	 * 添加群组或者群组类型
	 * 
	 * @param group
	 * @return
	 * @throws LoraOrgUserException
	 */
	public int addGroupAndType(Group group) throws LoraOrgUserException;
	
	/**
	 * 如果groupId是一个群组的类型 则删除这个群组的类型和群组类型下所有的群组
	 * 如果 groupId是一个群组 删除这个群组和群组对应的公式
	 * 
	 * @param groupId
	 * @return
	 * @throws LoraOrgUserException
	 */
	public int deleteGroupById(String groupId)throws LoraOrgUserException;
}
